home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / gcc / ixemsdk.lha / man / cat3 / regexp.0 < prev    next >
Text File  |  1996-09-02  |  9KB  |  150 lines

  1.  
  2. REGEXP(3)                  UNIX Programmer's Manual                  REGEXP(3)
  3.  
  4. NNAAMMEE
  5.      rreeggccoommpp, rreeggeexxeecc, rreeggssuubb, rreeggeerrrroorr - regular expression handlers
  6.  
  7. SSYYNNOOPPSSIISS
  8.      ##iinncclluuddee <<rreeggeexxpp..hh>>
  9.  
  10.      _r_e_g_e_x_p _*
  11.      rreeggccoommpp(_c_o_n_s_t _c_h_a_r _*_e_x_p)
  12.  
  13.      _i_n_t
  14.      rreeggeexxeecc(_c_o_n_s_t _r_e_g_e_x_p _*_p_r_o_g, _c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g)
  15.  
  16.      _v_o_i_d
  17.      rreeggssuubb(_c_o_n_s_t _r_e_g_e_x_p _*_p_r_o_g, _c_o_n_s_t _c_h_a_r _*_s_o_u_r_c_e, _c_h_a_r _*_d_e_s_t)
  18.  
  19. DDEESSCCRRIIPPTTIIOONN
  20.      TThhiiss iinntteerrffaaccee iiss mmaaddee oobbssoolleettee bbyy regex((33))..  IItt iiss aavvaaiillaabbllee ffrroomm tthhee
  21.      ccoommppaattiibbiilliittyy lliibbrraarryy,, lliibbccoommppaatt..
  22.  
  23.      The rreeggccoommpp(), rreeggeexxeecc(), rreeggssuubb(), and rreeggeerrrroorr() functions implement
  24.      egrep(1)-style  regular expressions and supporting facilities.
  25.  
  26.      The rreeggccoommpp() function compiles a regular expression into a structure of
  27.      type regexp,  and returns a pointer to it.  The space has been allocated
  28.      using malloc(3) and may be released by free.
  29.  
  30.      The rreeggeexxeecc() function matches a NUL-terminated _s_t_r_i_n_g against the com-
  31.      piled regular expression in _p_r_o_g. It returns 1 for success and 0 for
  32.      failure, and adjusts the contents of _p_r_o_g's _s_t_a_r_t_p and _e_n_d_p (see below)
  33.      accordingly.
  34.  
  35.      The members of a regexp structure include at least the following (not
  36.      necessarily in order):
  37.  
  38.            char *startp[NSUBEXP];
  39.            char *endp[NSUBEXP];
  40.  
  41.      where NSUBEXP is defined (as 10) in the header file.  Once a successful
  42.      rreeggeexxeecc() has been done using the rreeggeexxpp(), each _s_t_a_r_t_p- _e_n_d_p pair de-
  43.      scribes one substring within the _s_t_r_i_n_g, with the _s_t_a_r_t_p pointing to the
  44.      first character of the substring and the _e_n_d_p pointing to the first char-
  45.      acter following the substring.  The 0th substring is the substring of
  46.      _s_t_r_i_n_g that matched the whole regular expression.  The others are those
  47.      substrings that matched parenthesized expressions within the regular ex-
  48.      pression, with parenthesized expressions numbered in left-to-right order
  49.      of their opening parentheses.
  50.  
  51.      The rreeggssuubb() function copies _s_o_u_r_c_e to _d_e_s_t, making substitutions accord-
  52.      ing to the most recent rreeggeexxeecc() performed using _p_r_o_g. Each instance of
  53.      `&' in _s_o_u_r_c_e is replaced by the substring indicated by _s_t_a_r_t_p[] and
  54.      _e_n_d_p[]. Each instance of `\_n', where _n is a digit, is replaced by the
  55.      substring indicated by _s_t_a_r_t_p[_n] and _e_n_d_p[_n]. To get a literal `&' or
  56.      `\_n' into _d_e_s_t, prefix it with `\'; to get a literal `\' preceding `&' or
  57.      `\_n', prefix it with another `\'.
  58.  
  59.      The rreeggeerrrroorr() function is called whenever an error is detected in
  60.      rreeggccoommpp(), rreeggeexxeecc(), or rreeggssuubb().  The default rreeggeerrrroorr() writes the
  61.      string _m_s_g, with a suitable indicator of origin, on the standard error
  62.      output and invokes exit(2).  The rreeggeerrrroorr() function can be replaced by
  63.      the user if other actions are desirable.
  64.  
  65. RREEGGUULLAARR EEXXPPRREESSSSIIOONN SSYYNNTTAAXX
  66.      A regular expression is zero or more _b_r_a_n_c_h_e_s, separated by `|'.  It
  67.      matches anything that matches one of the branches.
  68.  
  69.      A branch is zero or more _p_i_e_c_e_s, concatenated.  It matches a match for
  70.      the first, followed by a match for the second, etc.
  71.  
  72.      A piece is an _a_t_o_m possibly followed by `*', `+', or `?'.  An atom fol-
  73.      lowed by `*' matches a sequence of 0 or more matches of the atom.  An
  74.      atom followed by `+' matches a sequence of 1 or more matches of the atom.
  75.      An atom followed by `?' matches a match of the atom, or the null string.
  76.  
  77.      An atom is a regular expression in parentheses (matching a match for the
  78.      regular expression), a _r_a_n_g_e (see below), `.'  (matching any single char-
  79.      acter), `^' (matching the null string at the beginning of the input
  80.      string), `$' (matching the null string at the end of the input string), a
  81.      `\' followed by a single character (matching that character), or a single
  82.      character with no other significance (matching that character).
  83.  
  84.      A _r_a_n_g_e is a sequence of characters enclosed in `[]'.  It normally match-
  85.      es any single character from the sequence.  If the sequence begins with
  86.      `^', it matches any single character _n_o_t from the rest of the sequence.
  87.      If two characters in the sequence are separated by `-', this is shorthand
  88.      for the full list of ASCII characters between them (e.g. `[0-9]' matches
  89.      any decimal digit).  To include a literal `]' in the sequence, make it
  90.      the first character (following a possible `^').  To include a literal
  91.      `-', make it the first or last character.
  92.  
  93. AAMMBBIIGGUUIITTYY
  94.      If a regular expression could match two different parts of the input
  95.      string, it will match the one which begins earliest.  If both begin in
  96.      the same place but match different lengths, or match the same length in
  97.      different ways, life gets messier, as follows.
  98.  
  99.      In general, the possibilities in a list of branches are considered in
  100.      left-to-right order, the possibilities for `*', `+', and `?' are consid-
  101.      ered longest-first, nested constructs are considered from the outermost
  102.      in, and concatenated constructs are considered leftmost-first.  The match
  103.      that will be chosen is the one that uses the earliest possibility in the
  104.      first choice that has to be made.  If there is more than one choice, the
  105.      next will be made in the same manner (earliest possibility) subject to
  106.      the decision on the first choice.  And so forth.
  107.  
  108.      For example, `(ab|a)b*c' could match `abc' in one of two ways.  The first
  109.      choice is between `ab' and `a'; since `ab' is earlier, and does lead to a
  110.      successful overall match, it is chosen.  Since the `b' is already spoken
  111.      for, the `b*' must match its last possibility--the empty string--since it
  112.      must respect the earlier choice.
  113.  
  114.      In the particular case where no `|'s are present and there is only one
  115.      `*', `+', or `?', the net effect is that the longest possible match will
  116.      be chosen.  So `ab*', presented with `xabbbby', will match `abbbb'.  Note
  117.      that if `ab*', is tried against `xabyabbbz', it will match `ab' just af-
  118.      ter `x', due to the begins-earliest rule.  (In effect, the decision on
  119.      where to start the match is the first choice to be made, hence subsequent
  120.      choices must respect it even if this leads them to less-preferred alter-
  121.      natives.)
  122.  
  123. RREETTUURRNN VVAALLUUEESS
  124.      The rreeggccoommpp() function returns NULL for a failure (rreeggeerrrroorr() permit-
  125.      ting), where failures are syntax errors, exceeding implementation limits,
  126.      or applying `+' or `*' to a possibly-null operand.
  127.  
  128. SSEEEE AALLSSOO
  129.      ed(1),  ex(1),  expr(1),  egrep(1),  fgrep(1),  grep(1),  regex(3)
  130.  
  131. HHIISSTTOORRYY
  132.      Both code and manual page for rreeggccoommpp(), rreeggeexxeecc(), rreeggssuubb(), and
  133.      rreeggeerrrroorr() were written at the University of Toronto and appeared in
  134.      4.3BSD-Tahoe. They are intended to be compatible with the Bell V8
  135.      regexp(3),  but are not derived from Bell code.
  136.  
  137. BBUUGGSS
  138.      Empty branches and empty regular expressions are not portable to V8.
  139.  
  140.      The restriction against applying `*' or `+' to a possibly-null operand is
  141.      an artifact of the simplistic implementation.
  142.  
  143.      Does not support egrep's  newline-separated branches; neither does the V8
  144.      regexp(3),  though.
  145.  
  146.      Due to emphasis on compactness and simplicity, it's not strikingly fast.
  147.      It does give special attention to handling simple cases quickly.
  148.  
  149. BSD Experimental                 June 4, 1993                                3
  150.